本文介绍如何通过ARMS Go探针和ASM对Go应用进行全链路灰度并实时监控。
Demo应用
Demo应用部署架构:
Demo应用YAML:
所有应用均部署在go-gray命名空间下。
使用ARMS监控Golang应用
通过Golang探针将Go应用接入ARMS应用监控,即可在ARMS中查看对应应用的应用拓扑、接口调用、数据库分析等相关监控数据。
使用ASM进行全链路灰度
创建ASM实例并添加集群。
使用以下内容创建命名空间为istio-system的ingressgateway网关规则。具体操作,请参见创建ingressgateway网关规则。
给Demo的所有应用注入Sidecar并重启。具体操作,请参见安装Sidecar代理。
配置链路追踪。
创建opentelemetry-operator-system命名空间。
kubectl create namespace opentelemetry-operator-system
创建链路追踪的Service。
apiVersion: v1 kind: Service metadata: name: default-collector namespace: opentelemetry-operator-system spec: ports: - port: 4317 protocol: TCP targetPort: 4317 selector: app: default-collector sessionAffinity: None type: ClusterIP
在ASM控制台开启链路追踪。
OpenTelemetry服务域名(完整FQDN):default-collector.opentelemetry-operator-system.svc.cluster.local
OpenTelemetry服务端口:4317
在可观测配置页面的链路追踪设置区域,启用链路追踪,并按需配置采样率。
创建泳道。
创建泳道组test。
配置项
说明
trace id请求头
traceparent
引流请求头
x-asm-prefer-tag
泳道服务
requestsender、go-demo-a、go-demo-b、go-demo-c
创建v1和v2泳道。
配置项
说明
泳道名称
分别配置为v1、v2
配置服务标签
标签名称:选择ASM_TRAFFIC_TAG
标签值:分别选择v1、v2
添加服务
v1泳道:选择requestsender、go-demo-a、go-demo-b、go-demo-c
v2泳道:选择go-demo-a、go-demo-c
分别为v1和v2泳道添加引流规则。
配置项
说明
入口服务
选择requestsender.go-gray.svc.cluster.local
引流规则
名称:分别输入v1、v2
域名:*
匹配方式:精确
匹配内容:/greetinit
创建完成示例:
验证结果
在页面获取ASM网关的公网IP。
执行以下命令,设置环境变量。
xxx.xxx.xxx.xxx
为上一步获取的IP。export ASM_GATEWAY_IP=xxx.xxx.xxx.xxx
验证全链路灰度功能是否生效。
基线:
for i in {1..100}; do curl -H 'x-asm-prefer-tag: v1' http://${ASM_GATEWAY_IP}/greetinit; echo ''; sleep 1; done;
预期输出:
{"code":0,"data":{"greeting":"Hello ","callChain":"Init:base:172.30.208.29 - A:base:172.30.208.114 - B:base:172.30.208.116 - C:base:172.30.208.120"},"message":"success"} {"code":0,"data":{"greeting":"Hello ","callChain":"Init:base:172.30.208.29 - A:base:172.30.208.114 - B:base:172.30.208.116 - C:base:172.30.208.120"},"message":"success"}
灰度:
for i in {1..100}; do curl -H 'x-asm-prefer-tag: v2' http://${ASM_GATEWAY_IP}/greetinit; echo ''; sleep 1; done;
预期输出:
{"code":0,"data":{"greeting":"Hello ","callChain":"Init:base:172.30.208.29 - A:gray:172.30.208.115 - B:base:172.30.208.116 - C:gray:172.30.208.122"},"message":"success"} {"code":0,"data":{"greeting":"Hello ","callChain":"Init:base:172.30.208.29 - A:gray:172.30.208.115 - B:base:172.30.208.116 - C:gray:172.30.208.122"},"message":"success"}
查看监控数据
在ARMS控制台的 页面查看对应的Go应用监控。